# encoding: utf-8
'''
@学生:李槟妤
@任务： 设计一个decorator，它可作用于任何函数上，并打印该函数的执行时间：
@易出错点：没有考虑metric（‘字符串’）这种情况
'''

import time
import functools
def metric(text='debug'):
    def decorators(func):
        functools.wraps(func)
        def wrapper(*args,**kw):
            start_time=time.time()
            print("the start time is",start_time)
            val=func(*args,**kw)
            end_time=time.time()
            print("the end time is  ", end_time)
            print('耗时：{:.4f}s'.format(end_time - start_time))
            return val
        return wrapper
    return decorators
#第一种情况
@metric()
def slow(x, y, z):
    time.sleep(3)
    return x * y * z
s=slow(11,22,33)
print(s)
#第二种情况
@metric('execute')
def fast(x, y):
    time.sleep(2)
    return x + y
f=fast(11,22)
print(f)
#测试
if f != 33:
    print('测试失败!')
elif s != 7986:
    print('测试失败!')
else:
     print('测试成功!')

#错误的情形
import time
import functools
def decorators(func):
    functools.wraps(func)
    def wrapper(*args,**kw):
        start_time=time.time()
        print("the start time is",start_time)
        val=func(*args,**kw)
        end_time=time.time()
        print("the end time is  ", end_time)
        print('耗时：{:.4f}s'.format(end_time - start_time))
        return val
    return wrapper
#第一种情况
@decorators
def slow(x, y, z):
    time.sleep(3)
    return x * y * z
s=slow(11,22,33)
print(s)
#测试
if s != 7986:
    print('测试失败!')
else:
     print('测试成功!')